<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="text/javascript">
        //返回值： 函数内部，代码执行结束，给向函数外部提供一个结果
        //定义一个函数，计算m-n之间的数的和
        //定义函数时，声明参数m n 调动函数时，传一个值，参数n赋值了
        function fn(m, n) {
            var total = 0;
            for (var i = m; i <= n; i++) {
                total += i;
            }
            return total;
        }
        //调用函数并且传参数 //需要将累加后的和，返回到函数外面
        // var res = fn(100, 200);
        // console.log(res);

        //return 语法 特点
        // 如果调用函数后，需要使用的函数的结果，则需return 返回值。
        //return 之后的代码 不执行
        //如果没有写return，或者return后面没有加具体的值，则返回值为undefined
        // function f1(m) {
        //     return 'abc';
        //     return m;
        //     return ;
        //     console.log(10000);
        // }
        // var res = f1(10);
        // //后续还得使用这种值，参与其他运算
        // console.log(res);
        //
        // var a = 100;
        // console.log(res + 100);

        //函数本身也是一个特殊的值，数据类型是属于对象object类型的
        console.log(typeof null); //object
        console.log(typeof f1); // function

        //表达式声明方式 把函数当做一个值
        var f2 = function() {
                console.log(200);
                return 300;
            }
            //把函数f2作为 返回值
        function f3() {
            // var a = 100;
            // return f2;
            return f2();
            // var b = f2();
            // return b;
        }
        //由于f3中，f2后面没有小括号，所有f2函数没有被调用，而且直接将函数作为一个值返回了
        var res = f3();
        console.log(res);
        // var res =f2;
        // var res =function(){console.log(200); return 300;};

        res(); // 300()
        f2();
    </script>
</body>

</html>